package com.jinsilu.freight.other;

import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 我的时间工具类
 *
 * @author yangyang
 * @time 2021-01-13 15:43
 */
public class MyTimeUtils {
    //UTC时间格式
    private static String UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
    //本地时间格式
    private static String LOCAL_FORMAT = "yyyy-MM-dd HH:mm:ss";

    //当地时间 ---> UTC时间
    public static String local2UTC(Long time) {
        SimpleDateFormat sdf = new SimpleDateFormat(UTC_FORMAT, Locale.getDefault());
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        return sdf.format(null == time ? new Date() : new Date(time));
    }

    /**
     * UTC时间 ---> 当地时间
     * 如：2019-07-24T06:57:06.548Z ---> 2019-07-24 14:57:06
     *
     * @param utcTime UTC时间
     */
    public static String utc2Local(String utcTime, Integer offset) {
        SimpleDateFormat utcFormatter = new SimpleDateFormat(UTC_FORMAT, Locale.getDefault());//UTC时间格式
        utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        try {
            Date utcDate = utcFormatter.parse(utcTime);
            SimpleDateFormat localFormatter = new SimpleDateFormat(LOCAL_FORMAT, Locale.getDefault());//当地时间格式
            if (offset != null && offset >= 0) {
                localFormatter.setTimeZone(TimeZone.getTimeZone(String.format("GMT+%s", Math.min(offset, 11))));
            } else if (offset != null) {
                localFormatter.setTimeZone(TimeZone.getTimeZone(String.format("GMT%s", Math.max(-11, offset))));
            } else {
                localFormatter.setTimeZone(TimeZone.getDefault());
            }
            if (utcDate == null) return "";
            return localFormatter.format(utcDate.getTime());
        } catch (Exception e) {
            Log.e("MyTimeUtils", "utc2Local: " + e.getMessage(), e);

        }
        return "";
    }

    /* 將Server傳送的UTC時間轉換為指定時區的時間 */
    public static String convertTime(String srcTime, TimeZone timezone) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
        SimpleDateFormat dspFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
        String convertTime;
        Date result_date;
        long result_time = 0;
        // 如果傳入引數異常,使用本地時間
        if (null == srcTime)
            result_time = System.currentTimeMillis();
        else {
            try { // 將輸入時間字串轉換為UTC時間
                sdf.setTimeZone(TimeZone.getTimeZone("GMT00:00"));
                result_date = sdf.parse(srcTime);
                if (null == result_date) return "";
                result_time = result_date.getTime();
            } catch (Exception e) { // 出現異常時,使用本地時間
                result_time = System.currentTimeMillis();
                dspFmt.setTimeZone(TimeZone.getDefault());
                convertTime = dspFmt.format(result_time);
                return convertTime;
            }
        }
        // 設定時區
        dspFmt.setTimeZone(timezone);
        convertTime = dspFmt.format(result_time);
        return convertTime;
    }
}
